namespace Wips.AppService.SqlSugar.Authorities.Users;

/// <summary>
/// 用户动态服务
/// </summary>
public class UserDynamicService 
{
    // private ICacheManager _cacheManager;
    // /// <summary>
    // /// 构造函数
    // /// </summary>
    // /// <param name="dbContext"></param>
    // /// <param name="securityContextAccessor"></param>
    // /// <param name="loggerFactory"></param>
    // /// <param name="cacheManager"></param>
    // /// <param name="extraDataPermissions"></param>
    // public UserDynamicService(IMainSqlSugarDbContext dbContext, ISecurityContextAccessor securityContextAccessor,
    //     ILoggerFactory loggerFactory, ICacheManager cacheManager,
    //     IEnumerable<IExtraDataPermission> extraDataPermissions) :
    //     base(dbContext, securityContextAccessor, loggerFactory, cacheManager, extraDataPermissions)
    // {
    //     _cacheManager = cacheManager;
    // }
    //
    // /// <summary>
    // /// 获取企业的所有用户
    // /// </summary>
    // /// <param name="enterpriseId"></param>
    // /// <returns></returns>
    // [HttpGet]
    // [DaprDynamicMethod]
    // public async Task<List<UserRpcViewModel>> GetUserByEnterpriseId(string enterpriseId)
    // {
    //     var result = await QueryNoTracking()
    //         .InnerJoin<EnterpriseUser>((user, eu) => user.Id == eu.UserId)
    //         .Where((user, eu) => eu.EnterpriseId
    //                              == enterpriseId)
    //         .Select(user => new UserRpcViewModel
    //         {
    //             Id = user.Id,
    //             UserName = user.UserName,
    //             RealName = user.RealName,
    //             PhoneNumber = user.PhoneNumber,
    //             Email = user.Email,
    //             Status = user.Status,
    //         })
    //         .ToListAsync();
    //
    //     return _cacheManager.GetOrCreate<List<UserRpcViewModel>>("ALLUSERS:" + EnterpriseId, () => result, new TimeSpan(0, 0, 30));
    // }
    //
    // /// <summary>
    // /// 读取组织架构用户树形数据
    // /// </summary>
    // /// <param name="enterpriseId">企业ID</param>
    // /// <returns></returns>
    // [HttpGet]
    // [DaprDynamicMethod]
    // public async Task<IList<TreeSelectViewModel>> GetTreeOrganizationUsersAsync(string enterpriseId)
    // {
    //     _dbContext.QueryFilter.Clear();
    //
    //     var organizations = await QueryNoTracking<Organization>()
    //         .Where(p => p.EnterpriseId == enterpriseId)
    //         .ToListAsync();
    //
    //     if (organizations.Count == 0)
    //     {
    //         return new List<TreeSelectViewModel>();
    //     }
    //
    //     // 读取用户
    //     var users = await QueryNoTracking<OrganizationUser>()
    //         .LeftJoin<Organization>((ou, o) => ou.OrganizationId == o.Id)
    //         .LeftJoin<User>((ou, o, u) => ou.UserId == u.Id)
    //         .Where((ou, o, u) => o.EnterpriseId == enterpriseId)
    //         .Where((ou, o, u) => !string.IsNullOrEmpty(u.Id))
    //         .Select((ou, o, u) => new OrganizationUserModel
    //         {
    //             OrganizationId = o.Id,
    //             UserId = u.Id,
    //             RealName = u.RealName
    //         })
    //         .ToListAsync();
    //
    //     var result = new List<TreeSelectViewModel>();
    //     GetTreeChildren(organizations, users, result, "");
    //
    //     return result;
    // }
    //
    // private class OrganizationUserModel
    // {
    //     /// <summary>
    //     /// 组织架构ID
    //     /// </summary>
    //     public string OrganizationId { get; set; } = string.Empty;
    //
    //     /// <summary>
    //     /// 用户ID
    //     /// </summary>
    //     public string UserId { get; set; } = string.Empty;
    //
    //     /// <summary>
    //     /// 真实姓名
    //     /// </summary>
    //     public string RealName { get; set; } = string.Empty;
    // }
    //
    // /// <summary>
    // /// 递归读取
    // /// </summary>
    // /// <param name="entities"></param>
    // /// <param name="organizationUserModels"></param>
    // /// <param name="results"></param>
    // /// <param name="parentId"></param>
    // private static void GetTreeChildren(IList<Organization> entities,
    //     IList<OrganizationUserModel> organizationUserModels,
    //     ICollection<TreeSelectViewModel> results,
    //     string? parentId)
    // {
    //     IList<Organization> result = string.IsNullOrEmpty(parentId)
    //         ? entities.Where(p => string.IsNullOrEmpty(p.ParentId)).ToList()
    //         : entities.Where(p => p.ParentId == parentId).ToList();
    //
    //     foreach (var t1 in result)
    //     {
    //         var res = new TreeSelectViewModel
    //         {
    //             Id = t1.Id,
    //             ParentId = t1.ParentId,
    //             Title = t1.Name,
    //             Value = t1.Id,
    //             Key = t1.Id,
    //             Disabled = t1.Status == Status.Disabled,
    //             IsLeaf = !string.IsNullOrEmpty(t1.ParentId)
    //         };
    //
    //         if (entities.Any(p => p.ParentId == t1.Id))
    //         {
    //             res.Children = new List<TreeSelectViewModel>();
    //             GetTreeChildren(entities, organizationUserModels, res.Children, t1.Id);
    //         }
    //
    //         var users = organizationUserModels
    //             .Where(p => p.OrganizationId == t1.Id)
    //             .Where(p => !string.IsNullOrEmpty(p.UserId))
    //             .ToList();
    //         // 添加用户
    //         if (users.Count > 0)
    //         {
    //             res.Children ??= new List<TreeSelectViewModel>();
    //
    //             res.Children.AddRange(users
    //                 .Select(p => new TreeSelectViewModel
    //                 {
    //                     ParentId = t1.Id,
    //                     Title = p.RealName,
    //                     Value = p.UserId,
    //                     Key = ObjectId.GenerateNewStringId(),
    //                     IsLeaf = true
    //                 })
    //                 .ToList());
    //         }
    //
    //         if (res.Children.Count > 0)
    //         {
    //             results.Add(res);
    //         }
    //     }
    // }
}